使用者認證是行動應用程式中至關重要的一部分,特別是當應用程式涉及到個人資料和敏感資訊的時候。透過有效的認證機制,我們可以確保只有合法的使用者能夠訪問應用程式的特定功能。本章將介紹如何在 B4A 應用程式中實作使用者註冊與登入、使用 OAuth 和社群登入、以及管理使用者 Session。
建立一個穩固的使用者註冊與登入系統是任何認證流程的核心。這涉及到資料收集、資料驗證以及安全地存儲使用者憑證。
Sub RegisterUser(email As String, password As String)
' 假設使用 AES 加密來保護密碼
Dim encryptedPassword As String = EncryptData(password, "YourSecretKey")
Dim sql As SQL
sql.Initialize(File.DirInternal, "users.db", True)
sql.ExecNonQuery2("INSERT INTO users (email, password) VALUES (?, ?)", Array As String(email, encryptedPassword))
ToastMessageShow("註冊成功", False)
End Sub
在這段程式碼中,使用 AES 加密來保護使用者的密碼,並將其存儲在 SQLite 資料庫中。這樣可以確保即使資料庫遭到攻擊,密碼也不會以明文形式洩露。
2. 使用者登入
登入流程需要驗證使用者的電子郵件和密碼是否正確,並允許合法的使用者訪問應用程式。
Sub LoginUser(email As String, password As String) As Boolean
Dim sql As SQL
sql.Initialize(File.DirInternal, "users.db", True)
Dim cursor As Cursor = sql.ExecQuery2("SELECT password FROM users WHERE email = ?", Array As String(email))
If cursor.RowCount > 0 Then
cursor.Position = 0
Dim storedPassword As String = cursor.GetString("password")
If storedPassword = EncryptData(password, "YourSecretKey") Then
ToastMessageShow("登入成功", False)
Return True
End If
End If
ToastMessageShow("登入失敗", False)
Return False
End Sub
這段程式碼展示了如何驗證使用者的憑證,並確保只有使用者提供的密碼與存儲在資料庫中的加密密碼匹配時,才能成功登入。
OAuth 是一種開放標準,用於讓第三方應用程式安全地訪問使用者的資源而不必透露其憑證。透過 OAuth,使用者可以使用現有的社群帳戶(例如 Google 或 Facebook)來登入應用程式,無需再創建新的帳戶。
Sub StartOAuthLogin
Dim oauthURL As String = "https://accounts.google.com/o/oauth2/v2/auth?client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&response_type=token&scope=email"
Dim webview As WebView
webview.Initialize("")
Activity.AddView(webview, 0, 0, 100%x, 100%y)
webview.LoadUrl(oauthURL)
End Sub
在這段程式碼中,我們初始化了一個 WebView 並加載了 OAuth 授權頁面。當使用者完成授權後,應用程式會接收到一個包含授權令牌的重定向網址,然後你可以提取並使用該令牌來訪問使用者的資料。
2. 處理 OAuth 回調
當使用者完成授權後,應用程式需要處理 OAuth 回調以獲取授權令牌。
Sub WebView1_OverrideUrl(Url As String) As Boolean
If Url.StartsWith("YOUR_REDIRECT_URI") Then
Dim token As String = Url.SubString(Url.IndexOf("access_token=") + 13)
SaveOAuthToken(token)
ToastMessageShow("OAuth 登入成功", False)
Return True
End If
Return False
End Sub
Sub SaveOAuthToken(token As String)
Dim prefs As SharedPreferences
prefs.Initialize("MyPrefs")
prefs.PutString("oauth_token", token)
End Sub
這段程式碼中,我們檢查 WebView 的 URL 是否包含授權令牌,並將其存儲在 SharedPreferences 中以供後續使用。
管理使用者 Session
在使用者成功登入後,應用程式需要維持使用者的 Session 狀態,以便在整個使用過程中保留使用者的認證信息。
Sub SaveUserSession(userId As String)
Dim prefs As SharedPreferences
prefs.Initialize("MyPrefs")
prefs.PutString("user_id", userId)
prefs.PutBoolean("logged_in", True)
End Sub
Sub IsUserLoggedIn As Boolean
Dim prefs As SharedPreferences
prefs.Initialize("MyPrefs")
Return prefs.GetBoolean("logged_in", False)
End Sub
這段程式碼展示了如何存儲和檢查使用者的登入狀態,並在需要時確保應用程式保持使用者的 Session 狀態。
2. 登出處理
為了允許使用者安全地登出,應用程式需要清除 Session 資訊。
Sub LogoutUser
Dim prefs As SharedPreferences
prefs.Initialize("MyPrefs")
prefs.Remove("user_id")
prefs.PutBoolean("logged_in", False)
ToastMessageShow("已登出", False)
End Sub
這段程式碼通過清除 SharedPreferences 中的相關資料來實現使用者登出,並顯示登出成功的提示訊息。
以下是一個簡單的範例應用程式,結合了使用者註冊、登入、OAuth 登入與 Session 管理的技術。
Sub Process_Globals
' 全域變數
End Sub
Sub Globals
Dim edtEmail As EditText
Dim edtPassword As EditText
Dim btnRegister As Button
Dim btnLogin As Button
Dim btnOAuthLogin As Button
Dim lblStatus As Label
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("MainLayout")
edtEmail.Initialize("edtEmail")
Activity.AddView(edtEmail, 10, 10, 300, 50)
edtPassword.Initialize("edtPassword")
Activity.AddView(edtPassword, 10, 70, 300, 50)
btnRegister.Initialize("btnRegister")
btnRegister.Text = "註冊"
Activity.AddView(btnRegister, 10, 130, 100, 50)
btnLogin.Initialize("btnLogin")
btnLogin.Text = "登入"
Activity.AddView(btnLogin, 120, 130, 100, 50)
btnOAuthLogin.Initialize("btnOAuthLogin")
btnOAuthLogin.Text = "使用 OAuth 登入"
Activity.AddView(btnOAuthLogin, 230, 130, 200, 50)
lblStatus.Initialize("")
Activity.AddView(lblStatus, 10, 190, 300, 50)
If IsUserLoggedIn Then
lblStatus.Text = "使用者已登入"
End If
End Sub
Sub btnRegister_Click
RegisterUser(edtEmail.Text, edtPassword.Text)
End Sub
Sub btnLogin_Click
If LoginUser(edtEmail.Text, edtPassword.Text) Then
SaveUserSession(edtEmail.Text)
lblStatus.Text = "登入成功"
Else
lblStatus.Text = "登入失敗"
End Sub
End Sub
Sub btnOAuthLogin_Click
StartOAuthLogin
End Sub
結論
本章介紹了如何在 B4A 應用程式中實作使用者認證功能,從基本的註冊與登入,到使用 OAuth 進行社群登入,再到管理使用者 Session。透過這些技術,你可以為應用程式建立一個強大且安全的認證系統,確保只有合法的使用者能夠訪問應用程式的敏感資料和功能。隨著這些技術的應用,你的應用程式將能夠為使用者提供更好的安全性與使用體驗。